home *** CD-ROM | disk | FTP | other *** search
/ The Original Shareware 1.1 / The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso / 2 / u_mind.zip / U-MIND.DOC < prev   
Text File  |  1985-03-05  |  51KB  |  920 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.     
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.                 -----------------------------------------------
  28.                 :                                             :
  29.                 : Supplement To Ultra-Utilities Documentation :
  30.                 :                                             :
  31.                 :           >>>>>> Ultra-Mind <<<<<<          :
  32.                 :                                             :
  33.                 :  The Intelligent Database Program Generator :
  34.                 :                                             :
  35.                 -----------------------------------------------
  36.  
  37.                   RELEASE 1.0, First Release, December, 1983
  38.                              Author: Wat Buchanon
  39.           
  40.           
  41.                     
  42.  
  43.           Ultra-Mind program and documentation Copyright (C), 1983, The
  44.           FreeSoft Company, P.O. Box 27608, St. Louis, MO 63146.  All Rights
  45.           Reserved.  Please see Ultra-Utilities documentation for warranty and
  46.           duplication policy.
  47.                                Table Of Contents
  48.                                -----------------
  49.  
  50.           Introduction........................................UM-1
  51.           
  52.           Defining And Generating Your Database...............UM-2
  53.           
  54.           How To Use The Generated Program....................UM-8
  55.           
  56.           Appendix A: Format Of Ultra-Mind Disk Files.........UM-11
  57.           
  58.           Appendix B: Wish List...............................UM-13
  59.           
  60.           Appendix C: The Ultra-Utilities.....................UM-14
  61.           
  62.           Appendix D: Limited License For Ultra-Mind..........UM-15
  63.           UM-1)                   Introduction
  64.                                   ------------
  65.           
  66.           At FreeSoft, we do quite a lot of database work, both for ourselves 
  67.           and for clients.  After writing about the seven millionth database 
  68.           manager, we came to a startling conclusion: very little was actually 
  69.           changing from program to program.  We admittedly are experts when it 
  70.           comes to reinventing the wheel, but this time a thought struck us, 
  71.           "Why not write a database program generator?" (TA-DA! Sound of 
  72.           trumpets...).  Well, that was several years ago, and Ultra-Mind is 
  73.           the end result.  Basically what it does is allow you to set up your 
  74.           unique database needs, and then actually writes a dedicated database 
  75.           program in BASIC while you watch.
  76.           
  77.           What we found was that we were doing in a few minutes what used to 
  78.           take hours or days.  Here's a brief outline of Ultra-Mind's 
  79.           capabilities and features:
  80.           
  81.           1) This program allows you to set up a customized data entry system 
  82.              and then writes a dedicated BASIC database manager program.
  83.           
  84.           2) The data entry can be divided into multiple screens, called 
  85.              "pages".
  86.           
  87.           3) Several different types of input fields are supported: Numeric,    
  88.              Alphanumeric, Formatted Numeric, Calculated, Automatic Date, and   
  89.              Automatic Time.  In addition, the user can specify any keys that   
  90.              are restricted from entry for each individual field (No Z's 
  91.              allowed, for instance).
  92.           
  93.           4) Non-field symbols, such as titles or borders, can be placed any-   
  94.              where on the data entry screens for a truly professional 
  95.              appearance.
  96.           
  97.           5) Generated program is documented with remarks for easy 
  98.              customization.
  99.           
  100.           6) Sophisticated hashing algorithm nullifies BASIC's slow execution.  
  101.              Typical record access (no matter how many records in the system)   
  102.              when the key field is known is under 1/2 second.
  103.           
  104.           7) Knowledge of BASIC, data-file input/output routines, or other      
  105.              special functions is not required.  A small amount of BASIC 
  106.              formula format is helpful for using calculation fields.
  107.           
  108.           8) All generated programs can be compiled for added speed under the   
  109.              Search and List functions.
  110.           
  111.           9) Number of fields and total field characters dependent only on 
  112.              available memory (total field characters per record must be less   
  113.              than 65,536 characters not counting program size).
  114.  
  115.           We hope you'll enjoy this package and will choose to support The 
  116.           FreeSoft Company in our endeavor to bring you the most interesting 
  117.           software at the best price.  We place this product in your hands at 
  118.           no cost in order for you to truly judge its appropriatness for your 
  119.           applications.
  120.           UM-2)           Defining And Generating Your Database
  121.                           -------------------------------------
  122.  
  123.           Before executing the Ultra-Mind program generator, you should insure 
  124.           that the following programs are on the diskette in your logged 
  125.           (default) disk drive:
  126.           
  127.           1) Ultra-Mind program generator (U-MIND.BAS)
  128.           2) Ultra-Mind skeleton program (SKELETON.BAS)
  129.           3) BASIC programming language  (BASIC.COM or BASICA.COM)
  130.  
  131.           From the DOS prompt, type: BASIC U-MIND
  132.           and the program should load and execute after a few seconds.  You 
  133.           will first be presented with the question:
  134.           
  135.           Do you wish to:
  136.           
  137.           1) Define a database
  138.           2) Generate an already defined database
  139.           
  140.           You should reply by pressing the '1' key (don't press <ENTER> after 
  141.           this). The program will ask you for a filename for the resulting 
  142.           program (8 characters, first character alphabetic).  DO NOT add an 
  143.           extension (a period followed by 1-3 characters) to this filename. The 
  144.           program will now ask you for the title of the program and the 
  145.           author's name (yours!). Finally, you'll be asked which disk drive 
  146.           will later be used to hold the data file.  You should have a disk 
  147.           with plenty of room in this drive, as the generated program itself,
  148.           as well as several other information files will be sent to this drive
  149.           while Ultra-Mind is working.         
  150.           
  151.             You are now presented with the screen layout display. This display 
  152.           is used to tell Ultra-Mind the information you wish to have displayed
  153.           in your database program data entry screens, as well as to define the
  154.           type of input fields.
  155.           
  156.           The bottom of the screen is used as a message area in both the 
  157.           program generator and in your generated program.  Therefore, the top 
  158.           23 lines of the screen are reserved for your information.
  159.           
  160.           First, a little background on database files.  A database file
  161.           consists of a group of individual entries called "records".  A record
  162.           might be a recipe, information on an employee, or an address book
  163.           listing.  Each record is further subdivided into groups of 
  164.           information called "fields".  In an employee record, one field might 
  165.           contain the date the employee was hired, and another might have his 
  166.           zip code.  One of the fields in each record is predefined as the "key 
  167.           field".  This is the field that best identifies each record, and will 
  168.           be used to retrieve the record from the file.  If a file contained 
  169.           records of inventory parts, you might designate the inventory number 
  170.           as the key field.  In an address list, you might use the person's 
  171.           last name as a key field.
  172.           
  173.           Why the last name instead of the full name?  Ultra-Mind works best in 
  174.           applications where you know the key field.  It's easy to forget 
  175.           whether you entered a person as George Smith or W. G. Smith, so the 
  176.           last name system would work best.  If you're not sure of the key 
  177.           field exactly, there is a mechanism for still finding the record, but 
  178.           it is much slower.
  179.           UM-3)
  180.           O.K., back to the program.  At the bottom of the screen, you should 
  181.           see the message:
  182.           
  183.           <Key Field>, Page 1: Use arrow keys to position cursor, then press 
  184.             <H>.
  185.           
  186.           There are three parts to a field, it's number (the key field is 
  187.           always field number 1), the field prompt (that tells you what to 
  188.           enter), and the input field area itself.  Directly above the message 
  189.           area in the center you should see a diamond character.  This is 
  190.           Ultra-Mind's "cursor", and is what you will move around to point to 
  191.           different areas of the screen.  Practice moving the cursor around 
  192.           with the arrow keys (or the number keys 8=up, 2=down, 6=right, and 
  193.           4=left).  Notice that if you press the Home key (or 7 key), the 
  194.           cursor jumps to the upper left hand corner of the screen.  The PgUp 
  195.           (or 9) key moves the cursor to the upper right, the PgDn (or 3) moves 
  196.           to the lower right, and the End (or 1) key moves the cursor to the 
  197.           lower left corner.  Select a place that will be appropriate for the 
  198.           key field and press the 'H' key.  Notice that the characters "1)" 
  199.           appear where the cursor used to be.  That's the field number that 
  200.           will make it easy for you to later tell the generated program which 
  201.           field you want to update or search for.
  202.           
  203.           At the bottom of the screen, a new message appears telling you to 
  204.           enter the field prompt you wish to use.  Type in a descriptive 
  205.           message that will prompt the user to type in the correct information 
  206.           for that field (like NAME: or PART NUMBER:, for instance).  You have 
  207.           up to 50 characters for the field prompt, and you can leave it blank 
  208.           should you wish.  The program will again ask you to position the 
  209.           cursor and press the <H> key.  Don't worry about moving the cursor 
  210.           over other characters on the screen, it's doesn't destroy what it 
  211.           moves over.  Don't allow your information to overlap other fields, 
  212.           though, or you will get an error message.
  213.           
  214.           When you've positioned the cursor and pressed the H key, you'll see 
  215.           your field prompt appear at that location.  Now, we must tell the 
  216.           computer what type of field this is.  The different field types each 
  217.           ask different questions, so we'll cover them one at a time.
  218.           
  219.           NUMERIC
  220.           -------
  221.           This type of field is composed only of numeric symbols, that is 0-9, 
  222.           the plus and minus signs and the decimal point (period).  Although it
  223.           is kept as a string of characters in the disk file, it is converted 
  224.           into a number when displayed by the generated program.  Only numeric 
  225.           fields can be used by calculation fields (described below).
  226.           
  227.           When you select this type of field, you will be asked to type in the
  228.           length of the field.  This is the number of characters that the 
  229.           largest possible number that can be entered will have.  FOR ALL 
  230.           FIELDS, THE FIELD NUMBER, FIELD PROMPT, AND INPUT FIELD MUST NOT BE 
  231.           GREATER THAN 79 CHARACTERS LONG TOTAL.  Because the number of fields 
  232.           is limited only by your computer's memory (and believe us, you have 
  233.           plenty of room), this really isn't a problem.  Just split up extra 
  234.           long fields into smaller ones.  You will then be asked to locate the
  235.           cursor and press <H>.  When you have done so, the input field appears
  236.           as a series of small boxes.  This field now looks exactly as it will
  237.           on the data entry screen of the generated program.
  238.           UM-4)
  239.           There is still more information the computer needs about this field.  
  240.           It next asks if you wish to restrict input characters.  If you type 
  241.           "N", any numeric character can be typed into the field.  If you 
  242.           answer "Y", you will be shown a list of all numeric characters and 
  243.           asked to type an "X" under the characters you wish to restrict.  Type 
  244.           a space under those you wish to allow.  Those characters that you 
  245.           restrict will be dead on the keyboard during entry of this field.
  246.           
  247.           Now the program asks you how many lines of edit checking you wish to 
  248.           have.  If you don't wish to check the field for entry errors, just 
  249.           type a 0.  Otherwise, for each edit check you'll be asked to enter an 
  250.           edit string.  The format for an edit string is:
  251.           
  252.           TESTSYMBOL VALUE
  253.           
  254.           Where TESTSYMBOL is either a > (greater than), < (less than), or = 
  255.           (equal to), and VALUE is a number.  Edit checks should be entered in 
  256.           the negative.  In otherwords the edit check:
  257.           < 52 
  258.           will tell the operator they've made an error only if the number they 
  259.           enter into this field is less than 52. 
  260.           
  261.           Finally, you'll be asked if you wish to use a special printing format 
  262.           when this field is later displayed.  If you do, just type the format 
  263.           as you would the format string in a BASIC PRINT USING statement 
  264.           (without surrounding quotes).  You should consult your BASIC manual 
  265.           on the PRINT USING statement if you're unsure of this.  As an 
  266.           example, if a field contained the number 342342.345 and your special 
  267.           printing format was ###,###.## the number would be displayed as 
  268.           342,342.34 when the record is displayed later.        
  269.           
  270.           ALPHANUMERIC
  271.           ------------
  272.           This field is used for entries that are either all alphabetic or 
  273.           mixed letters, symbols, and numbers.  Even if a number is entered 
  274.           into an alphanumeric field, it will be considered only a string of 
  275.           characters, and calculation fields cannot use it.
  276.           
  277.           This type of field needs the same type of information as numeric 
  278.           fields in the way of field position, field length, and input 
  279.           character restriction, except that it does not ask for edit checks or 
  280.           special printing formats.  There is only one type of edit check for 
  281.           alphanumeric fields and that is for a null entry (<ENTER> pressed 
  282.           without entering any characters).  Null entries can be allowed in any 
  283.           field except the key field.
  284.  
  285.           FORMATTED NUMERIC
  286.           -----------------
  287.           This is a special type of field that allows you to enter numbers into 
  288.           a "template".  For instance, the parentheses, space,  and hyphen in  
  289.           the following number (323) 343-3423 identify it as a phone number.  
  290.           Although formatted numeric fields are handy for entering numeric data 
  291.           into a template, the resulting number is treated as a string of 
  292.           characters, including the special symbols used in the template, and 
  293.           cannot be used by calculation fields.  After locating the cursor 
  294.           where you wish the input template to appear and pressing H, the 
  295.           computer will ask you to enter your special format.  Any special keys 
  296.           can go into the template except the backslash (\).  The backslash is 
  297.           used to show where the input numbers will be located.  If we wanted a 
  298.           phone number field like the one above, we would enter our format as:
  299.           (\\\) \\\-\\\\
  300.           UM-5)
  301.           When it's displayed on the screen, the backslashes will be converted 
  302.           to the familiar small input boxes.  Pay attention to your format, as 
  303.           its a bit easy to get confused.  For example, the format:
  304.           \\/\\/\\
  305.           could actually be used for entry of a date.  Look closely and see how 
  306.           it would displayed.  (Hint: 01/14/84).
  307.           
  308.           CALCULATED
  309.           ----------
  310.           This type of field is not entered by the user at all.  It is 
  311.           calculated from values in other numeric fields.  It is not displayed 
  312.           at all during the data entry process, only later when the record is 
  313.           retrieved from the file and displayed.  It's helpful to know BASIC's 
  314.           format for specifying formulas when using this type of field.  You 
  315.           need to pay attention to what the field numbers are of the numeric 
  316.           fields to be used and the resulting calculation field.  Here's an 
  317.           example.  If we were working on field 5 and we specified a 
  318.           calculation field, the computer would ask us how many calculation 
  319.           lines we wished to have.  For this example we'll just do something 
  320.           simple in a single calculation line.  To specify numeric or 
  321.           calculation fields in a calculation line, use the symbols F# followed 
  322.           by the field number in parentheses.  O.K., let's add the values in 
  323.           field 2 and field 4 and display that in our calculation field (field 
  324.           5, remember?).  Here's how our calculation line would look:
  325.           F#(5)=F#(2)+F#(4)
  326.           You can do all kinds of tricky things with calculation fields, and 
  327.           it's easy to get yourself in trouble with them, so practice is in 
  328.           order before using them.  If you need to store temporary values in a 
  329.           variable, use the variables U1# through U100#.
  330.           
  331.           You can also specify a special printing format for this field, just 
  332.           as you can for numeric fields.
  333.           
  334.           DATE AND TIME FIELDS
  335.           --------------------
  336.           These field types are also done automatically, but in the data entry 
  337.           stage.  It permanently stores the date or time in the field at the 
  338.           moment of data entry.  It's useful for fields such as "Last Updated 
  339.           ON: 03-15-1983".  Just use the U>pdate function on these fields each 
  340.           time you update a record.
  341.           
  342.           Each time you finish entering a field, you are presented with a list 
  343.           of choices:
  344.           
  345.           1) Enter new field, 2) Start new page, 3) Enter non-field symbols, 4) 
  346.           Quit.
  347.           
  348.           Select "Enter new field" to continue adding fields to that page.  
  349.           Whoops!  What's a page?  Well, that's a special feature of Ultra-Mind 
  350.           that keeps your screens from getting cluttered.  You can have as many 
  351.           display screens (called "pages") as you wish.  When you select "Start 
  352.           new page" the screen layout area is erased and you continue with a 
  353.           fresh slate.
  354.           
  355.           The "Enter non-field symbols" option is used to "prettify" your 
  356.           screen layouts with titles, borders, etc.  When you select this 
  357.           option, you will again be asked to locate the cursor where you wish 
  358.           to place the symbols.  Then you will asked to enter the symbols you 
  359.           wish to place there.  There are two different ways to specify the
  360.           UM-6)
  361.           characters:
  362.           
  363.           1) Just type them in from the keyboard.  (Note: your string cannot    
  364.              begin with an "@" symbol).  
  365.           
  366.           2) Using a special syntax.  The syntax is:
  367.              @,REPEAT,ASCIICODE,ASCIICODE,ASCIICODE...etc.
  368.              The @ symbol in the first position tells the computer that the     
  369.              special syntax follows.  The REPEAT is a numeric value that tells 
  370.              how many times to repeat the following symbols.  The ASCIICODE's 
  371.              are the ASCII values of the symbols you with to display.  
  372.              Confusing?  It's easier than it sounds.  Let's look at a couple of 
  373.              examples:
  374.              @,79,61
  375.              would print a string of 79 equal signs (ASCII code 61).
  376.              @,10,40,41
  377.              would print the sequence () ten times for a total length of 20 
  378.              characters.  It would look like this:
  379.              ()()()()()()()()()()
  380.              The reason for using this syntax is so you can draw vertical lines 
  381.              of characters on the screen.  Try this sequence:
  382.              @,10,42,31,29
  383.              It should have drawn a vertical line of 10 equal signs.  The 
  384.              special codes 31 and 29 are used to move the cursor down a row and 
  385.              backspace one character after each equal sign is printed.  The 
  386.              special control codes are:
  387.                     28 - Move right one character
  388.                     29 - Move left one character
  389.                     30 - Move up one row
  390.                     31 - Move down one row
  391.              Please note that because of Microsoft BASIC peculiarities, you 
  392.              won't be able to print a vertical line of more than 13 characters 
  393.              at one time (all sorts of strange things happen).  To get around 
  394.              this anomaly, just print a string of 13 vertical characters and 
  395.              then print a string of 10 more just beneath it for a line that 
  396.              will stretch from top to bottom of the screen.  Experimentation is 
  397.              in order to get the most out of this feature.
  398.           
  399.           If you're like us and don't happen to like digging through the BASIC 
  400.           manual for the chart of ASCII codes, you might appreciate this 
  401.           feature:  When asked to enter the symbols, just type the @ symbol 
  402.           alone.  You will now enter the <Help> mode.  To find out a 
  403.           character's ASCII code, just type it on the keyboard.  Nifty, eh?
  404.           
  405.           One last caveat, the non-field symbols are not checked very closely 
  406.           for overlapping other screen info, so caution is the word.  Wrap 
  407.           around is allowed on the horizontal only.
  408.           
  409.           When you're all done entering your screen displays, the fun part 
  410.           starts.  Just enter the selection "Quit" and the program will ask 
  411.           you if you wish to go ahead and generate the database.  If you don't, 
  412.           you can always generate it later by selecting the "Generate an 
  413.           already defined database" function when first executing this program.
  414.           
  415.           As the program is being written, just sit back and appreciate the 
  416.           number of hours it would have taken you to do this by hand.  All in
  417.           all, program generation should take only a few minutes.
  418.           UM-7)
  419.           During the definition and generation process, a number of important 
  420.           files are created.  The extensions of the programs tell what their 
  421.           purpose are.  Let's assume your program is called TEST.  The files 
  422.           TEST.ATR and TEST.HDR contain information that is used to generate 
  423.           the program.  These are both explained in Appendix A.  It's not 
  424.           necessary to keep these files on your program disk once the program 
  425.           is generated.  In the generation process, two more files are created: 
  426.           TEST.BAS is your database program, and TEST.BAT is a DOS batch file 
  427.           used to execute the program.  YOU SHOULD ALWAYS USE THE BATCH FILE TO 
  428.           START YOUR PROGRAM since it sets important record size pointers.  If 
  429.           you choose to compile the program, you can discard the batch file.
  430.           Otherwise, to execute your database program, you should exit to DOS, 
  431.           make sure a copy of BASIC is on your program diskette, and type the 
  432.           word TEST at a DOS prompt.
  433.           
  434.           The first time this program is loaded will be very time consuming.  
  435.           If you used the DOS TYPE command to look at the program, you would 
  436.           see that it is in ASCII format with line numbers out of sequence.
  437.           It's a good idea once the program is loaded to break out by pressing 
  438.           the BREAK key while holding down the CTRL key, and save the program 
  439.           in compressed format using the BASIC command SAVE "TEST.BAS".  The 
  440.           program can be restarted then by entering the command RUN.
  441.           
  442.           TIPS FOR MAKING DEFINITION A PLEASANT EXPERIENCE
  443.           ------------------------------------------------
  444.           1) Always have a couple of disks with plenty of room and copies of 
  445.              BASIC on them on hand just in case.
  446.           
  447.           2) There's no way to go back if you make an error during definition, 
  448.              so move slowly and have some sense of direction.  Freestyle coding 
  449.              can be fast, but you're better off at least having a rough sketch 
  450.              of what you'd like to end up with before starting.  This goes 
  451.              double if you intend to use edit lines, special printing formats,  
  452.              or calculation fields.
  453.           
  454.           3) Since the method used to make copies of screen information on the 
  455.              printer is by pressing the PrtSc key while holding down the SHIFT 
  456.              key, you'll want to be careful about using non-printable 
  457.              characters for non-field symbols or in field prompts.  They can    
  458.              cause some printers to do all sorts of wild things.
  459.           UM-8)              How To Use The Generated Program
  460.                              --------------------------------
  461.           Once the program is loaded as above described, you can remove the 
  462.           program diskette.  After a brief title display, you'll be instructed 
  463.           to mount your data disk in the drive specified during the generation 
  464.           process, and press the "C" key.  All data disks used by Ultra-Mind 
  465.           programs must be first initialized with special information.  When 
  466.           you press the "C" key, the program will look for and load in this 
  467.           information if it exists.  Otherwise, it will automatically begin 
  468.           the initialization process.  You will be asked if the data file 
  469.           should use all available disk space, or if you'd like to specify the 
  470.           maximum number of records on that diskette.  After getting your 
  471.           choice, initialization will begin.  Depending on the number of 
  472.           records that must be initialized, this can take a few minutes or so.
  473.           
  474.           When choosing the size of your data file, keep this in mind: this 
  475.           program will work most efficiently when there is lots of room on the 
  476.           disk.  Even though you know your particular program will never have 
  477.           more than 200 records, go ahead and use all available space.  The 
  478.           "Specify number of records" option is mainly included for testing
  479.           purposes.  Diskettes are cheap, your time isn't.
  480.           
  481.           You'll also be asked to give the data diskette a "volume label".  
  482.           Just type in a word or two (Like Disk #1), and record this on the 
  483.           diskette's label.  It just identifies the diskette to the system.
  484.           The volume label really serves no function in this program.  However, 
  485.           we envisioned it for our report generator program (forthcoming) so 
  486.           that you could extend your data file over several diskettes, yet have 
  487.           them all act as one big file for reports.  If you already know that 
  488.           your file will be too big to put on one data diskette, you might use 
  489.           this to divide your file (two disks, labeled A-L and M-Z might be an 
  490.           example for a name list file).
  491.           
  492.           Once this data diskette is loaded into the program, it is important 
  493.           that you DO NOT REMOVE THE DATA DISKETTE before doing either of two 
  494.           things:
  495.           
  496.           1) Choose the "X-tend Work To New Data Diskette" function.
  497.           2) Choose the "Quit and return to BASIC" function.
  498.           
  499.           Removing or swapping diskettes without doing either of these will at 
  500.           best confuse the program into not knowing where the hell your data 
  501.           is and at worst absolutely destroying your data files (ouch).
  502.  
  503.           Data disk in place, initialized, and special information loaded?  
  504.           Good, now you're in the MAIN MENU area of your program.  In the 
  505.           middle of the screen are your current list of choices, which we'll 
  506.           cover in a moment, and at the top is some important information about 
  507.           your data diskette and the current status of the program.
  508.           UM-8)
  509.           The top of the screen lists the number of initialized records as well 
  510.           as the number of records you have already entered.  It also displays 
  511.           the volume label name of the current data diskette.  At the top left 
  512.           of the screen is a message marked "Current Record".  This is used for 
  513.           two things, first to let you know that a record has been retrieved 
  514.           using the "Get A Record" function before updating or deleting it, or 
  515.           to allow you to continue a "Search For And List Records" function 
  516.           from a certain point after aborting a search.  If no record has been 
  517.           recently retrieved with the "Get A Record" function, the current 
  518.           record will be NONE.  Otherwise, it will be a number between 1 and 
  519.           the number of records initialized on that data diskette.
  520.           
  521.           Let's go through the commands on the main menu screen:
  522.           
  523.           GET A RECORD
  524.           ------------
  525.           This simply retrieves an entered record and displays it on the 
  526.           screen.  It will prompt you for the key field of your desired record 
  527.           and then will search for it.  Remember to use the correct case to 
  528.           enter the key field, as this program views lowercase and uppercase 
  529.           letters differently.  JOE SMITH and joe smith and Joe Smith are each 
  530.           considered different records.  When the record is displayed, you'll 
  531.           be asked "Is This It (Y/N)?"  This allows you to find the correct 
  532.           record when two or more records have identical key fields.  If you 
  533.           just can't find a record that you know should be in there, use the 
  534.           "Search For And List Records" to scan through the data file and note 
  535.           the correct key field.
  536.           
  537.           When the correct record is displayed, you'll see a short menu at the 
  538.           bottom of the screen.  The Update, Delete, and Add functions are 
  539.           described below.  The Menu function takes you back to the main menu 
  540.           page, and the Switch Page function let's you look at the various 
  541.           pages of the record, if there are more than one.
  542.           
  543.           SEARCH FOR AND LIST RECORDS
  544.           ---------------------------
  545.           This function is used to list all active (and deleted if you wish) 
  546.           records in the data file, or to select records on the contents of one 
  547.           of the fields.
  548.           
  549.           You will first be asked to enter the record # to start the search or 
  550.           press <ENTER> to start at current record.  If you had just completed 
  551.           a partial search and want to continue from the point you left off, 
  552.           just press the <ENTER> key.  Otherwise, enter the record number you 
  553.           wish to start the listing with (the first record in a datafile is 
  554.           record #1).  If you press <ENTER> and there is no current record in 
  555.           memory, the search will begin at record #1.  Except for this 
  556.           function, we don't make much use of record numbers with this system.
  557.           
  558.           Next, you will be asked whether you wish to display records that have 
  559.           been deleted.  Records in a data file exist in one of three states: 
  560.           Active (meaning it contains a valid record), Deleted (meaning it 
  561.           contains a record marked as deleted), and Empty (meaning it has not 
  562.           yet ever contained a record).  Accidentally deleted records can be 
  563.           restored to active status by using this function unless they have 
  564.           been overwritten by recently added records.
  565.           
  566.           The next prompt is whether you wish to select records for display by 
  567.           the contents of one it's fields.  If you don't, you will see every 
  568.           record on file.
  569.           UM-9)
  570.           If you do, you'll be asked which field you wish to test.  Then, 
  571.           you'll be asked to enter a test string.  The three types of tests 
  572.           that can be made on a field are:
  573.           
  574.           >STRING  (field contains "STRING" somewhere in it)
  575.           <STRING  (field begins with "STRING")
  576.           =STRING  (field contains "STRING" exactly and only)
  577.            
  578.           Once again, lowercase is considered different than uppercase.  For 
  579.           our purposes here at FreeSoft, we don't use lowercase at all for 
  580.           field information and it makes life much easier.
  581.           
  582.           If a match is found, you have the choice of either continuing the 
  583.           search or aborting it.  If you abort, operation continues just as if 
  584.           the record were retrieved with the "Get A Record" function.
  585.           
  586.           ADD A RECORD
  587.           ------------
  588.           This function is used to add records to the data file.  It is pretty 
  589.           much a straight ahead entry procedure.  After all fields have been 
  590.           entered, you can proofread the current page and either abort the add 
  591.           or go ahead and save the record on disk.
  592.           
  593.           DELETE CURRENT RECORD
  594.           ---------------------
  595.           This function is used to mark records as "deleted" status.  Deleted 
  596.           records cannot be retrieved by a "Get A Record" function and can only 
  597.           be viewed by the "Search For And List Records" function.  Deleted 
  598.           records can be overwritten by newly added records as the space is 
  599.           needed.
  600.           
  601.           UPDATE CURRENT RECORD
  602.           ---------------------
  603.           Any of a field's records, including the key field, can be modified
  604.           using this function.  Like the "Delete Current Record" function, the
  605.           record must first be retrieved using the "Get A Record Function". 
  606.           You may wish to review the record and note the field numbers you 
  607.           want to modify before selecting the "Update Current Record" 
  608.           function, because the prior contents of a field are erased as soon 
  609.           as you specify that you wish to modify that field.
  610.           
  611.           X-TEND WORK TO NEW DATA DISKETTE
  612.           --------------------------------
  613.           This function is used to close the data file on one data diskette and 
  614.           load the special information from a new one.  The new disk must be 
  615.           already initialized or initialization procedures will begin 
  616.           automatically.  NEVER SWAP DATA DISKETTES WITHOUT SELECTING THIS 
  617.           FUNCTION FIRST!
  618.           
  619.           INITIALIZE NEW DATA DISKETTE
  620.           ----------------------------
  621.           This is used to perform the initialization procedures on a data 
  622.           diskette so that it can be used to hold your data file.  THIS DOES 
  623.           NOT LOAD IN THE SPECIAL INFORMATION!  Always verify that the volume 
  624.           label specified in the MAIN MENU display corresponds the data 
  625.           diskette mounted in the drive before attempting to do any work with 
  626.           it!
  627.           UM-10)
  628.           QUIT AND RETURN TO BASIC
  629.           ------------------------
  630.           This is the only approved way of ending the program.  Ending the 
  631.           program by any other means could possibly lead to a destroyed data 
  632.           file!
  633.           
  634.           Well, that about does it.  Chances are good that you'll find many 
  635.           more undocumented features (hopefully not bugs), that we'll need to 
  636.           include in the next revision of this manual.  We always appreciate 
  637.           your comments and suggestions.  Keep those cards and letters coming 
  638.           (we always wanted to say that).
  639.                                           
  640.           UM-11)     APPENDIX A: FORMAT OF THE ULTRA-MIND DISK FILES
  641.                      -----------------------------------------------
  642.           
  643.           Chances are, you're going to want to do some rather exciting and 
  644.           unusual things with this package.  To aid you in your endeaver, 
  645.           here's a description of the data files used by these programs.
  646.           
  647.           In the following examples, we use the filespec TEST for the program 
  648.           name.
  649.           
  650.           TEST.HDR
  651.           --------
  652.           NF  - Number of defined fields
  653.           ND  - Number of defined display pages
  654.           TB  - Total number of field characters - 1 (one byte variable         
  655.                 STAT$ is added to beginning of each record to hold         
  656.                 record status: A=Active, D=Deleted, E=Empty
  657.           
  658.           TEST.ATR
  659.           --------
  660.           AU$ - Author's name
  661.           NA$ - Program's filespec (including drive but without extension)
  662.           TI$ - Program title
  663.              For each field defined by NF in TEST.HDR:
  664.                PG - Page number
  665.                MR - Field prompt row
  666.                MC - Field prompt column
  667.                M$ - Field prompt string
  668.                TY - Field type (1=Numeric, 2=Alphanumeric, 3=Formatted numeric, 
  669.                     4=Calculation, 5=Date, 6=Time, 7=Non-field symbols)
  670.           
  671.                    If TY=1
  672.                    -------
  673.                    FR  - Field row
  674.                    FC  - Field column
  675.                    FL  - Field length
  676.                    AI$ - String of acceptable input characters
  677.                    EL  - Number of edit lines
  678.                         For each EL: EL$ - Edit line
  679.                    SP$ - Special printing format (Y or N)
  680.                         If SP$="Y": SF$ - special printing format string
  681.           
  682.                    If TY=2
  683.                    -------
  684.                    FR  - Field row
  685.                    FC  - Field column
  686.                    FL  - Field length
  687.                    AI$ - String of acceptable input characters
  688.                       If not key field:  AI$ - Null entry valid (Y or N)
  689.           
  690.                    If TY=3
  691.                    -------
  692.                    FR  - Field row
  693.                    FC  - Field column
  694.                    FL  - Field length
  695.                    AF$ - Input format string
  696.                    AI$ - String of acceptable input characters
  697.           UM-12)
  698.                    If TY=4
  699.                    -------
  700.                    FR  - Field row
  701.                    FC  - Field column
  702.                    CL  - Number of calculation lines
  703.                        For each CL: CL$ - Calculation line string
  704.                    SP$ - Special printing format (Y or N)
  705.                        If SP$="Y": SF$ - Special printing format string
  706.           
  707.                    If TY=5 or TY=6
  708.                    ---------------
  709.                    FR - Field row
  710.                    FC - Field column
  711.                    FL - Field length
  712.           
  713.                    If TY=7
  714.                    -------
  715.                    No further variables
  716.           
  717.           TEST.VOL
  718.           ---------
  719.           V$ - Volume label string of data diskette
  720.            
  721.           TEST.DEF
  722.           --------         
  723.           MAXSIZE - Number of initialized records on data diskette
  724.           GOOD    - Number of entered records on data diskette
  725.           
  726.           TEST.DAT
  727.           --------
  728.           The data file is a variable length random file than varies with the 
  729.           number of fields, length of fields, etc.  Study the blocking and un-  
  730.           blocking procedures in your generated program to see the format of 
  731.           your data file.
  732.           
  733.           HASHING ALGORYTHM EXPLAINED
  734.           ---------------------------
  735.           This package uses a hashing routing for placing and retrieveing data 
  736.           records.  Basically, what happens is that your key field is converted 
  737.           to a number between 1 and the number of initialized records on your 
  738.           data diskette.  This becomes the record number for the record.  If a 
  739.           record is already in that location, the file is scanned sequentially 
  740.           from that record until an empty or deleted record space is found.  
  741.           The hashing algorythm we're using was developed and placed in the 
  742.           public domain by Bruce L. Tonkin and we're indebted to him for its 
  743.           usefulness.
  744.             To be effective, the hashing algorythm must be reasonably "random" 
  745.           to insure that records will spread out through the available space 
  746.           instead of clumping together.  This is what gives this package such 
  747.           excellent retrieval speed under typical circumstances.
  748.           UM-13)                  APPENDIX B: WISH LIST
  749.                                   ---------------------
  750.              For many purposes, this package will be sufficient "off the 
  751.           shelf".  However, we encourage you all to do what you do best: take a 
  752.           skeleton package and refine it to something really phenomenal.  
  753.           Here's our wish list for Ultra-Mind:
  754.           
  755.           1) Better documentation:  O.K., we admit that this isn't the best in 
  756.              the world, but it's all in there if you look close enough.  This 
  757.              manual definitely needs a re-write.  We'll take responsibility for 
  758.              this and offer the fact that we wanted to get the darned thing out 
  759.              as our only excuse.
  760.           
  761.           2) Sample definition (.HDR & .ATR) files: This is the best way for    
  762.              folks to learn how to get the fanciest use out this package.  If   
  763.              you develope a snazzy file for keeping track of your video tape    
  764.              collection or christmas card list, why not share it with all of    
  765.              us.  The definition files are rather small, so it's not necessary  
  766.              to distribute the package in generated form.  We'll give this      
  767.              responsibility to y'all.
  768.           
  769.           3) Report generator program:  We're working on this one and it should 
  770.              be ready in the first quarter of 1984.
  771.           
  772.           4) Better UPDATE function:  We sorely need an update function that 
  773.              uses the INS and DEL keys like an editor instead of wiping out the 
  774.              field to be replaced.  Any of you hot shots care to take this on?
  775.           
  776.           5) Better lineprinter support: A small assembly language program that 
  777.              would print the screen and turn all non-printable characters into  
  778.              periods would be great.  BASIC routines are just too slow.  We 
  779.              give this one to you also.
  780.           
  781.           6) Definition file editor:  Let's make it easy to take a definition   
  782.              file and either edit, delete, or add field information.  This 
  783.              would be great for "cloning" one data file's information into      
  784.              a new one, not to mention making it less frustrating when you      
  785.              make a mistake near the end of a lengthy definition session.  Any
  786.              takers?
  787.           
  788.           7) A natural evolution would allow you to define how your title   
  789.              and main menu pages will look. 
  790.            
  791.           As you can see, we've got all kinds of suggestions for making this 
  792.           product better.  After all, if we'd taken the time to do everything 
  793.           to Ultra-Mind that we wanted, you probably would never get it in your 
  794.           hands.  Sooner or later, you just have to take the darn thing and say 
  795.           "sink or swim, booger".
  796.            
  797.           One thing we do ask is that you not distribute the program in 
  798.           modified form.  Instead, offer your corrections or improvements as    
  799.           merge files.  That way, we can continue to support this package with  
  800.           updates and corrections from our end.  Otherwise, we just won't be 
  801.           able to keep track of all of the modifications floating around.  Be 
  802.           sure to send us any of your improvements or suggestions, though.  
  803.           They just might find a permanent home in Ultra-Mind.
  804.           UM-14)             APPENDIX C: THE ULTRA-UTILITIES
  805.                              -------------------------------
  806.  
  807.           The FreeSoft Company produces only user supported software.  If you 
  808.           find the software to be useful, we have a registration program so you
  809.           can support us.  As long as we keep getting the great support 
  810.           we've enjoyed so far, we'll continue to add packages to our one and 
  811.           only product: The Ultra-Utilities.  Our registration and duplication 
  812.           policies are in the Library #1 documentation.  Do not distribute this 
  813.           program until you have obtained, read, and understand these policies!
  814.           
  815.           If you don't have the complete 5-volume Ultra-Utility set, you don't 
  816.           know what you're missing.  To get the entire set, read and follow the 
  817.           below carefully:
  818.           
  819.           1) We now offer two libraries of the Ultra-Utilities.  FOR EACH 
  820.              LIBRARY that you want, send us one double sided, or two single     
  821.              sided diskettes formatted 8 sectors per track.  Do not send 
  822.              diskettes formatted 9 sectors per track or we'll just waste our    
  823.              time reformatting them.
  824.           
  825.           2) Send them to us along with a POSTAGE PAID, SELF-ADDRESSED RETURN   
  826.              MAILER.  A couple of stiff pieces of cardboard is suggested for    
  827.              envelope mailers.  We will not try to protect your diskettes from  
  828.              damage any better than you do.  Also, please make sure that you've 
  829.              got the correct amount of postage.  We hate to bitch, but we 
  830.              sometimes get up to 5 requests per day that arrive postage due.
  831.           
  832.           3) Send this conglomeration to: The FreeSoft Company, P.O. Box 27608, 
  833.              St. Louis, MO  63146.  Drop a note in the envelope telling us 
  834.              which library you want and where you heard about us.  If you don't 
  835.              send enough disks for both libraries, we'll assume you want only   
  836.              Library #1.
  837.           
  838.           The Ultra-Utilities Includes:
  839.           LIBRARY#1
  840.           ---------
  841.           ULTRA-ZAP: disk repair/modification utility with functions for 
  842.           display/modify disk sectors, display/modify file sectors, copy disk 
  843.           sectors, fill disk sectors, search for byte sequences (ASCII or 
  844.           numeric) in disk sectors, search for byte sequences in file sectors, 
  845.           interrogate disk format and protection schemes, modify BIOS disk 
  846.           parameter table.
  847.           
  848.           ULTRA-FORMAT: functions for formatting single standard tracks, 
  849.           re-format a "flaky" track without erasing old data, and format a 
  850.           non-standard (copy protected) track.
  851.           
  852.           ULTRA-FILE: functions for display file's directory information, 
  853.           assign or remove hidden status, assign or remove system status, 
  854.           display list of sectors allocated to a file, build a disk file from 
  855.           scratch, restore accidentally erased files, produce a unique roadmap 
  856.           of a diskette, and selectively kill files from a menu.
  857.           UM-14)
  858.           LIBRARY #2
  859.           ----------
  860.           ULTRA-OPTIMIZE: takes a standard BASIC program saved in ASCII format 
  861.           and optimizes it so that the /N switch can be used with the BASIC 
  862.           compiler to produce smaller and more efficient object code.
  863.           
  864.           ULTRA-MIND: intelligent database generator program that allows you to 
  865.           define a database with six different field types, full input control, 
  866.           and multiple full screens, and generates a unique BASIC program that 
  867.           offers record access in typical applications in less than 1/2 second 
  868.           (no matter how many records in the file).
  869.           
  870.           Coming soon to LIBRARY #2: Ultra-Report: report program generator for 
  871.           databases created with Ultra-Mind.
  872.           All of the Ultra-Utilties work with PC-DOS versions 1.10, 2.00 and
  873.           2.10
  874.           UM-15)        APPENDIX D: LIMITED LICENSE FOR ULTRA-MIND
  875.                         ------------------------------------------
  876.           
  877.           U-MIND.BAS and SKELETON.BAS are copyrighted programs and are owned 
  878.           soley by The FreeSoft Company.  You are free to use and distribute 
  879.           these and all other Ultra-Utility programs under the policies set 
  880.           forth in the LIBRARY #1 documentation manual.  By using this 
  881.           software, you agree not to distribute or duplicate any Ultra-Utility 
  882.           program until you have obtained, read, and understand all duplication 
  883.           and registration policies listed in that manual.
  884.           
  885.           You agree not to distribute any Ultra-Utility program in modified 
  886.           form and you agree not remove any information concerning The FreeSoft 
  887.           Company, it's products or copyrights from the programs or 
  888.           documentation.
  889.           
  890.           The FreeSoft Company gives sole ownership to you for all programs 
  891.           generated by Ultra-Mind.  You agree not to copyright such programs as 
  892.           not to interfere with our existing copyrights.  Otherwise, you are 
  893.           free to compile, modify, sell, or destroy any programs generated by 
  894.           Ultra-Mind.  No royalties are due The FreeSoft Company under any 
  895.           circumstance for the sale of programs generated by Ultra-Mind.
  896.           
  897.           If you have a problem with the above policies, we'll be willing to 
  898.           consider a special license for registered users only.
  899.  
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.